#ifndef ListaCompras_HPP
#define ListaCompras_HPP 1

#include <exception>
#include <string>
#include <list>

#if defined(_MSC_VER) && !defined(LISTACOMPRAS_STATIC_LIB)
#	ifdef _WINDLL
#		define ListaCompras_EXPORT __declspec(dllexport)
#	else
#		define ListaCompras_EXPORT __declspec(dllimport)
#	endif
#else
#	define	ListaCompras_EXPORT
#endif

struct ItemLista
{
	int id;
	std::string descricao;
	int quantidade;
	double precoUnitario;
};


class ListaCompras_EXPORT ListaComprasException : public std::exception
{
public:
	ListaComprasException(const char *msg) : msg_(msg) { }
	virtual ~ListaComprasException() throw() { }

	const char *what() const throw() { return msg_.c_str(); }

private:
	std::string msg_;
};


class ListaCompras_EXPORT ListaCompras
{
public:
	void carregaLista(const char *nomeArquivo);
	void gravaLista(const char *nomeArquivo);

	void incluiItem(ItemLista const &item);
	void removeItem(int id);
	void atualizaItem(ItemLista const &item);

	int size() const;
	std::list<ItemLista>::const_iterator begin() const;
	std::list<ItemLista>::const_iterator end() const;

private:
	std::list<ItemLista> itens_;
};

#endif
